#include "calcError.h"
#include <math.h>


bool checkSignalErrorValue(ntype::signal_t in, ntype::signal_t exp, ntype::error_t err_range, ntype::signal_t min_err_val, ntype::signal_t max_err_val)
{
    ntype::signal_t max_rage = max_err_val - (max_err_val - max_err_val * err_range);
    ntype::signal_t min_rage = min_err_val - (min_err_val - min_err_val * err_range);
    ntype::signal_t max_sig = exp + max_rage;
    ntype::signal_t min_sig = exp + min_rage;
    return((in < max_sig) && (in > min_sig )) ?  true : false;
}

ntype::error_t getSignalErrorValue(ntype::signal_t in, ntype::signal_t exp, ntype::error_t err_range, ntype::signal_t min_err_val, ntype::signal_t max_err_val)
{
    ntype::signal_t calc_val = 0.0;
    if(checkSignalErrorValue(in, exp, err_range, min_err_val, max_err_val) == true) {
        calc_val = ZERO_VALUE;
    } else {
        calc_val = ((in - exp) / std::max(in, exp));
    }
    return calc_val;
}

ntype::error_t getSignalErrorValueAbs(ntype::signal_t in, ntype::signal_t exp, ntype::error_t err_range, ntype::signal_t min_err_val, ntype::signal_t max_err_val)
{
    ntype::signal_t calc_val = 0.0;
    if(checkSignalErrorValue(in, exp, err_range, min_err_val, max_err_val) == true) {
        calc_val = ZERO_VALUE;
    } else {
        calc_val = ((in - exp) / std::max(in, exp));
        calc_val = fabs(calc_val);
    }
    return calc_val;
}

